#ifndef __BSP_H__
#define __BSP_H__

int devmem_read(unsigned long addr, unsigned long *pVal);
int devmem_write(unsigned long addr, unsigned long writeval);

/**************************************************************
*   保存参数到flash中，掉电保存
*   pName: 参数名称
*   pVal:  参数值(数字等都转成字符串存储)
*   out :  成功返回0，不成功返回小于0
*
*      注意: pName如果flash中存在，pval会覆盖原值   
*            pName如果flash中不存在，则会新建一个值
*            pName长度不超过64字节 
*/
int save_paramemter_to_flash(const char *pName, char *pVal);

/**************************************************************
*   从flash中加载OEM参数
*   pName: 参数名称
*   pVal:  返回参数buffer起始指针
*   buflen: 返回buffer长度，保证大于64
*   out :  成功返回获取的pval长度值，不成功返回小于0
*
*      注意: pName如果flash中存在，返回成功，参数值在pval中
*            pName如果flash中不存在，返回失败
*/
int load_paramemter_from_flash(const char *pName, char *pVal, unsigned int buflen);

/*************************************
*   真正将参数写入flash
*   调用次数不宜频繁,否则严重影响系统性能
*   建议:关机时调用一次或者退出菜单时调用一次就好
*/
int save_paramemters(void);

/*************************************
*   清空所有参数
*   调用次数不宜频繁,严重影响系统性能
*   清空UI参数, GUI部分做恢复出厂设置，应当优先使用。
*   清空WiFi 参数
*   不会格式化SDcard
*   不会执行重启
*/
int clear_paramemters(void);

/**************************************************************
*   从flash中加载OEM参数
*   pName: 参数名称
*   pVal:  返回参数值bffer(保证长度大于64)
*   out :  成功返回0，不成功返回小于0
*
*      注意: pName如果flash中存在，返回成功，参数值在pval中
*            pName如果flash中不存在，返回失败
*
*    为了保持和http api接口一致，固定约定的值有:
*    
*    OEM_FPGA_VER          setFpgaver
*    OEM_HW_VER            setHwver
*    OEM_SW_VER            setAppver
*    OEM_PRODUCT_NUM       setPN
*    OEM_SERIL_NUM         setSN
*    OEM_MODEL_NAME        setModelname
*    OEM_RPODUCE_DATE      setProductdate
*    OEM_PREFIX_SSID       setPrefixSSID
*
*    当然UI程序可以自由写入其他字段参数。
*/
int load_oeminfo_from_flash(const char *pName, char *pVal, unsigned int buflen);

/**************************************************************
*   读取fw系统版本号
*   pVal:  返回参数值bffer(保证长度大于64)
*   out :  成功返回0，不成功返回小于0
*
*/
int read_rootfs_version(char *pVal, unsigned int buflen);

/*
 * wifi开关
 * input:  0:off, 1:on
 */
int hal_wifi_onoff(unsigned int onoff);

#endif // !__BSP_H__